type
Post
status
Published
date
Aug 10, 2023
slug
C-sharp-leraning-abstract-class- and-open-close-principle
summary
C#知识学习—23 抽象类与开闭原则
tags
CS
C#
category
学习记录
icon
password
Property
Aug 14, 2023 11:57 AM
内容:接口 抽象类 SOLID 单元测试 反射
本节内容
什么是接口和抽象类
- 接口和抽象类都是“软件工程产物”
- 具体类→抽象类→接口:越来越抽象,内部实现的东西越来越少
- 抽象类是未完全实现逻辑的类(可以有字段和非public成员,他们代表了具体逻辑)
- 抽象类为复用而生:专门作为基类来使用,也具有解耦功能
- 封装确定的,开放不确定的,推迟到合适的子类中去实现
- 接口是完全未实现逻辑的“类”(“纯虚类”;只有函数成员;成员全部public,隐式)
- 接口为解耦而生:“高内聚,低耦合”,方便单元测试
- 接口是一个“协约”,早已为工业生产所熟知(有分工必有协作,有协作必有协约)
- 他们都不能实例化,只能用来声明变量、引用具体类(concrete class)的实例
抽象类
为做基类而生的“抽象类”与“开闭原则”
有抽象方法或其他抽象成员,类就成了抽象类
函数成员没有被完全实现的类
不允许实例化抽象类,两个用途:作为基类让别人派生,作为基类声明变量,引用子类的实例
抽象方法:纯虚方法
开闭原则:如果不是修bug,或者添加新的功能,不要去修改的类的代码,尤其是函数成员的代码。我们应该封装一些不变的,稳定的和确定的成员,把不确定的,有可能改变的成员修改为抽象成员,并且留给子类实现。
之前的实现方案,纯虚方法
改为抽象类实现,子类实现的时候也需要加override
抽象类不能直接被实例化
纯虚类的形式
换为接口interface的形式
抽象类:未完全实现
接口:完全未实现
- 作者:Kitety
- 链接:https://www.kitety.com/article/C-sharp-leraning-abstract-class-%20and-open-close-principle
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章



.png?table=block&id=fa81f9ab-c0da-4f4e-a935-0567380c36d0&t=fa81f9ab-c0da-4f4e-a935-0567380c36d0&width=1080&cache=v2)
.png?table=block&id=55df38cd-a361-41ee-a75d-c17615e78d6b&t=55df38cd-a361-41ee-a75d-c17615e78d6b&width=1080&cache=v2)
_(1).jpg?table=block&id=a716c7ee-7105-4a3f-8133-a15129086419&t=a716c7ee-7105-4a3f-8133-a15129086419&width=1080&cache=v2)
.jpg?table=block&id=2e9784d9-1d6e-44fc-9106-f0c576ddcb8f&t=2e9784d9-1d6e-44fc-9106-f0c576ddcb8f&width=1080&cache=v2)

.png?table=block&id=c0772cdb-ee08-49f4-b2f3-c804586bb769&t=c0772cdb-ee08-49f4-b2f3-c804586bb769&width=1080&cache=v2)

.png?table=block&id=b43ea4ae-a57d-4962-80ba-12280979702b&t=b43ea4ae-a57d-4962-80ba-12280979702b&width=1080&cache=v2)
